package educar.models;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import educar.db.JPA;

public class Docente extends Persona {
  private static JPA jpa = new JPA();
  
  /**
   * 
   * @param DNI
   * @param nombre
   * @param apellido
   * @param direccion
   */
  public Docente(int DNI, String nombre, String apellido,String direccion) {
    setDni(DNI);
	setNombre(nombre);
	setApellido(apellido);
	setDireccion(direccion);
  }
  
  /**
   * Modifica la direccion del docente 
   * @param nuevaDireccion "direccion de docente"
   */
  public void modificar(String nuevaDireccion){
    jpa.update("docente","direccion",nuevaDireccion,"dni",Integer.toString(this.getDni()));
  }
 
  /**
   * @param dni "dni de un docente"
   * @return u de tipo docente
   * @throws userNotFound
   */
  public static Docente getDocenteByDNI(String dni) throws docenteNotFound {
    ResultSet rs = null;
	Docente u = null;
	rs = jpa.getByField("docente","dni",dni);
	try {
	  if (rs.next()) {
	    u = new Docente(rs.getInt(1),rs.getString(2), rs.getString(3), rs.getString(4));
	  } 
	  else {
	    throw new docenteNotFound();
	  }
		
	} 
	catch (SQLException e) {
	  e.printStackTrace();
	}
	return u;
  }
  
  /**
   * Guarda y confirma la carga
   * @return true "si el docente es cargado"
   * @return false "si el docente no es cargado"
   */
  public boolean save() {
    try {
	  String dni = Integer.toString(this.getDni());
	  Docente.getDocenteByDNI(dni);
	  return false;
	} 
    catch (docenteNotFound e1) {
	  String[] columns = { "dni","nombre","apellido","direccion"};
	  PreparedStatement stm = jpa.newRecord("educar_dev.docente", columns);
	  try {
	    stm.setInt(1,this.getDni());
		stm.setString(2,this.getNombre());
	    stm.setString(3,this.getApellido());
		stm.setString(4,this.getDireccion());
	  } 
	  catch (SQLException e) {
	    e.printStackTrace();
		return false;
	  }
	  jpa.create(stm);
	  return true;
	  }
  }
	
  /**
   * @param table "nombre de la tabla"
   * @param column "nombre de la columna"
   * @param id "dni del docente"
   */
  public static void destroy(String table,String column,String id) {
    jpa.destroy(table,column,id); 
  }
  
  /**
   * @return docentes "lista de los nombres de los docentes cargados en la base"
   * @throws SQLException
   */
  public static ArrayList<String> getNombres() throws SQLException{
    ResultSet resultado = jpa.showAll("docente");
    ArrayList<String> docentes = new ArrayList<String> ();
    while (resultado.next()) {
      docentes.add(resultado.getString(1));
    }
    return docentes;
  }
}